package com.qikux.vo;

/**
 * View Object : 和 视图(可视化的界面) 相关的对象
 *
 * ResultVo 代表 业务层 执行的结果
 *
 *  结果要么成功, 要么失败
 *
 */
public class ResultVo<T> {

    /**
     * 业务 执行的 结果
     */
    private boolean status;

    /**
     * 失败的原因
     */
    private String message;

    /**
     * 业务执行 成功 / 失败 的 结果 (数据)
     */
    private T data;

    public boolean isStatus() {
        return status;
    }

    public String getMessage() {
        return message;
    }

    public T getData() {
        return data;
    }

    @Override
    public String toString() {
        return "ResultVo{" +
                "status=" + status +
                ", message='" + message + '\'' +
                ", data=" + data +
                '}';
    }

    public static  ResultBuilder ok(){
        return new ResultBuilder<>().status(true);
    }

    public static  ResultBuilder fail(String message){
        return new ResultBuilder<>().status(false).message(message);
    }

    public static class ResultBuilder<T>{

       private final ResultVo<T> resultVo = new ResultVo<>();

       private ResultBuilder<T> status(boolean status){
            resultVo.status = status;
            return this;
        }

       public ResultBuilder<T> message(String message){
           resultVo.message = message;
           return this;
       }

        public ResultVo<T> body(T data){
           resultVo.data = data;
           return resultVo;
        }

       public ResultVo<T> build(){
           return resultVo;
       }
    }
}
